#ifndef LINECHARTWIDGET_H
#define LINECHARTWIDGET_H

#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <QList>
#include <QDateTime>
#include "cpumonitor.h"

class ChartWidget : public QWidget
{
    Q_OBJECT

public:
    explicit ChartWidget(QWidget *parent = nullptr);
    // 数据更新函数，接受新的cpu数据并更新图表
    void updateData(const CPUData &data, bool isLocalData = true);
    // 清空图表数据
    void clearData();

protected:
    // 重写绘制事件
    void paintEvent(QPaintEvent *event) override;
    // 尺寸变化事件，当窗口尺寸变化，重新计算，触发重绘
    void resizeEvent(QResizeEvent *event) override;

private:
    // 绘制背景
    void drawBackground(QPainter &painter);
    // 绘制网格
    void drawGrid(QPainter &painter);
    // 绘制坐标轴标签
    void drawAxes(QPainter &painter);
    // 绘制折线
    void drawLines(QPainter &painter);
    // 绘制图例
    void drawLegend(QPainter &painter);
    // qint64 大小为8字节，有符号
    // 坐标映射
    QPoint mapToWidget(qint64 timestamp, double value);
    // 时间格式化
    QString formatTime(qint64 timestamp);

    // 数据存储，使用双端队列
    QList<CPUData> dataHistory;
    // 数据来源标识，用于区分本地和远程数据
    QList<bool> dataSourceFlags; // true=本地数据, false=远程数据
    // 最大点数
    static const int MAX_DATA_POINTS = 60;

    // 绘图区域
    // 图表绘制区域
    QRect chartRect;
    // 图例绘制区域
    QRect legendRect;

    // 坐标轴范围
    // 时间范围
    qint64 minTime;
    qint64 maxTime;
    // 数据范围
    double minValue;
    double maxValue;

    // 颜色定义
    QColor totalColor;  // 总使用率颜色
    QColor userColor;   // 用户态CPU的颜色
    QColor systemColor; //内核态CPU的颜色
    QColor gridColor;   // 网格颜色
    QColor axisColor;   // 坐标轴颜色
    QColor backgroundColor; // 背景颜色
};

#endif // LINECHARTWIDGET_H
